package com.neuedu.corejava.ch9;

public class ObjectClass {

	public static void main(String[] args) {
		//新建是两个字符串，判断是否相同
		//字符串的创建有两种方式：
		
		String s1="abc";
		
		String s2=new String ("abc");

		String s3=new String ("abc");
		
		String s4="abc";
		
		System.out.println("========================================");
		System.out.println(s1==s2); //false
		System.out.println(s2==s3); //false
		System.out.println(s1==s4); //true
		System.out.println("========================================");
		
		//  ==等值运算符 ：在判断对象（引用数据类型）时，它的功能是判断两个对象的地址是否相同
		//常量池：常量池是java语言提供的一种特殊的内存结构，用于储存程序运行过程中的常量，可以储存常量对象
		
		String s5="abc";//字符串在储存时，都会在常量池中进行保存，每个不同的字符串都会有自己的储存空间
		//s4="abcdf";
		
		//判断两个对象的数据值是否相同，即判断两个对象是否同一对象应该使用equals方法
		
		//equals方法是java.lang.Object类提供的方法，用于判断两个对象是否为同一个对象（或某些对象的值是否相同）
		//String类重写equals方法
		System.out.println(s1.equals(s2)); //true
		System.out.println(s2.equals(s3)); //true
		System.out.println(s1.equals(s4)); //true
		System.out.println("========================================");
		
		Student student1=new Student(1001,"jack");
		Student student2=new Student(1002,"jack");
		Student student3=student1;
		
		System.out.println(student1==student2);   //false
		System.out.println(student1.equals(student2));  //false
		System.out.println("========================================");

		System.out.println(student1==student3); //true
		System.out.println(student1.equals(student3)); //true
		System.out.println("========================================");

		//hashCode是哈希码，哈希码是通过哈希算法为每一个对计算出的唯一值，即每个对象的哈希值都是不同的。
		//equals方法默认的判断就是：判断两个对象的哈希值是否相同；故equals方法默认的判断是：判断两个对象的引用是否指向同一个对象。
		System.out.println(student1.hashCode()); //366712642
		System.out.println(student2.hashCode()); //1829164700
		System.out.println(student3.hashCode()); //366712642
		
		System.out.println("========================================");
		//当使用输出语句输出一个对象，默认会调用该对象的toString方法把对象转换成字符串进行输出
		//默认输出对象的：  类名@hashcode(使用16 进制)
		//如果需要输出对象的数据，需要重写toString方法
		System.out.println(student1+""+student1.toString());
		System.out.println(student2+""+student2.toString());
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	}

}
